import { API_URL } from '../../config/apiConfig';
import { LoginRequest } from './types';
import { getCookie } from '../../utils/cookieUtils';
import { authStore } from '../auth/store'
import { useRouter } from 'vue-router'
/**
 * 认证相关API服务
 */
export const authService = {
  /**
   * 用户登录
   * @param credentials 登录凭证
   * @returns Promise<void> 无响应内容，请求成功即为登录成功
   */
  async login(credentials: LoginRequest): Promise<{token: string, expiresIn: string}> {
    try {
      const response = await fetch(`${API_URL}/demo/auth/login`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(credentials),
        // 确保包含凭证（cookies）
        credentials: 'include'
      });
      
      if (!response.ok) {
        throw new Error(`登录失败: ${response.status}`);
      }
      
      // 解析响应内容，获取token和过期时间
      const data = await response.json();
      
      if (!data.token) {
        throw new Error('登录失败：服务器未返回认证令牌');
      }
      
      // 将token存储到cookie中
      // 注意：这里我们不再依赖服务端设置cookie，而是在客户端设置
      const { setCookie } = await import('../../utils/cookieUtils');
      
      // 计算过期时间，将expiresIn（毫秒）转换为天数
      const expiresInDays = Math.floor(parseInt(data.expiresIn) / (1000 * 60 * 60 * 24));
      
      // 设置cookie，过期时间为expiresInDays天
      setCookie('token', data.token, expiresInDays);
      
      return {
        token: data.token,
        expiresIn: data.expiresIn
      };
    } catch (error) {
      console.error('登录请求出错:', error);
      throw error;
    }
  },

  /**
   * 用户登出
   * @returns Promise<void> 无响应内容，请求成功即为登出成功
   */
  async logout(): Promise<void> {
    try {
      // 从cookie获取token
      const router = useRouter()
      const token = getCookie('token');
      
      if (!token) {
        console.warn('登出时未找到认证令牌');
        return;
      }

      const response = await fetch(`${API_URL}/demo/auth/logout`, {
        method: 'GET',
        headers: {
          'Authorization': `Bearer ${token}`
        },
        // 确保包含凭证（cookies）
        credentials: 'include'
      });
      
      if (!response.ok) {
        if (response.status === 401 || response.status === 403) {
                  // 清除认证状态
                  authStore.clearAuth()
                  // 重定向到登录页面
                  router.push('/')
                  return
                }
        throw new Error(`登出失败: ${response.status}`);
      }
      
      // 无需处理响应内容，请求成功即为登出成功
      return;
    } catch (error) {
      console.error('登出请求出错:', error);
      throw error;
    }
  }
};